var express = require('express')
const { findOnePromise } = require('../models/User')
var User = require('../models/User')
var Note = require('../models/Note')
var md5 = require('md5-node');
// markdown 装换模块
var MarkdownIt = require('markdown-it'),md = new MarkdownIt();

var router = express.Router()

router.get('/',function(req,res, next){
    var user = {}
    // 赋值 session
    user = req.session.user
    // 获取所有的博客数据
    var notes = {}
    Note.find().populate('userId').exec(function(err,ret){
        if(err){
            return next(err)
        }
        // console.log(ret)
        notes = ret
        notes.forEach(function(item, index, array){
            array[index].userId = item.userId.username
        })
        // console.log(notes)
        res.render('index.html',{
            title:'Blog 分享',
            notes:notes,
            user:user
        })
    })
})

router.get('/my', function(req, res, next){
    if(!req.session.user){
        return next(new Error('未登录'))
    }
    // 赋值 session
    user = req.session.user
    // 获取数据库中的笔记
    // console.log(user.username)
    Note.find({userId:user._id},function(err, ret){
        if(err){
            console.log('查询出错')
            next(err)
        }
        res.render('my.html',{
            user:req.session.user,
            notes:ret,
            title:'我的博客'
        })
    })
})

// 渲染登录页面
router.get('/login',function(req, res){
    res.render('login.html', {
        title:'登录'
    })
})

// 处理登录请求
router.post('/login',function(req, res, next){
    var formData = req.body
    // console.log(formData)
    formData.password = md5(formData.password)
    User.findOne({$and:[{email: formData.email},{password:formData.password}]},function(err, ret){
        if(err){
            next(err)
        }

        if(ret === null){
            // console.log(ret)
            // console.log(formData)
            return res.status(200).json({success:false, err_code:3})

        }
        //登录成功
        // console.log(ret)
        // 保存 session
        req.session.user = ret
        return res.json({success:true})

    })
})

// 渲染注册页面
router.get('/register', function(req, res){
    res.render('register.html', {
        title:'注册'
    })
})

// 处理注册请求
router.post('/register', function(req, res, next){
    var formData = req.body
    // 链式查询，判断email 和 username 是否已经存在
    User.findOnePromise({email:formData.email}).then(function(ret){
        if(ret !== null){
            res.status(200).json({success:false,err_code:2,msg:'Email is already exist'})
            return new Promise(()=>{})
        }else{
            return findOnePromise({username:formData.username})
        }
    }).then(function(ret){
        if(ret !== null){
            return res.status(200).json({success:false,err_code:1,msg:'Username is already exist'})
        }
        // 开始注册账号
        // 密码加密
        formData.password = md5(formData.password)
        new User(formData).save()
        return res.json({success:true})
    })


})

// // 处理获取笔记
// router.get('/getnote', function(req, res, next){
//     // 获取请求参数
//     var noteName = req.query.noteName
//     // 查询数据库
//     Note.findOne({noteName:noteName},function(err, ret){
//         if(err){
//             return next(err)
//         }
//         // 将 markdown 转换为 html
//         var html = md.render(ret.content)
//         return res.send(html)
//     })
// })

// 渲染详细的markdown
router.get('/show', function(req, res, next){
    // 获取 id
    var id = req.query.id
    var note,author
    // 根据 id 获取数据库数据
    Note.findById(id,function(err, ret){
        if(err){
            return next(err)
        }
        note = ret
        User.findOne({_id:ret.userId}).then(function(ret){
            author = ret
            // console.log(author)
            // 将 markdown 转换为 html
            var html = md.render(note.content)
            return res.render('show.html',{
                markdown:html,
                note:note,
                user:req.session.user,
                author:author,
                title:note.title
            })
        })

    })
    // res.send('success')
})


// 新增笔记页面
router.get('/new', function(req, res, next){
    if(!req.session.user){
        return next(new Error('未登录'))
    }
    res.render('new.html',{
        user:req.session.user,
        title:'发布博客'
    })
})

// 处理新增笔记
router.post('/new', function(req, res, next){
    // 获取用户
    var user = req.session.user
    if(!user){
        return next(new Error('未登录'))
    }

    // 获取post请求的数据
    var formData = req.body
    // console.log(formData)
    
    // 存入数据库
    new Note({
        userId:user._id,
        title:formData.title,
        description:formData.description,
        content:formData.content,
        type:formData.type
    }).save(function(err, ret){
        if(err){
            next(err)
        }
        res.redirect('/')
    })
})

router.get('/user',function(req, res, next){
    if(!req.session.user){
        return next(new Error('未登录'))
    }
    // 获取id
    var user = req.session.user
    Note.find({userId:user._id}).then(function(ret){
        notes = ret
        return res.render('user.html', {
            title:'我的空间',
            user:user,
            notes:notes
        })
    }).catch(function(err){
        return next(err)
    })
    // 根据id查找笔记
    // TODO
    // 渲染页面
    // res.render('user.html',{
    //     user:{
    //         id:123
    //     }
    // })
})

router.get('/edit',function(req, res, next){
    // 获取用户
    var user = req.session.user
    if(!user){
        return next(new Error('未登录'))
    }

    // 查询笔记
    Note.findById(req.query.id).then(function(ret){
        return res.render('edit.html',{
            title:'编辑',
            note:ret,
            user:user
        })
    }).catch(function(err){
        return next(err)
    })


})

router.post('/edit',function(req, res, next){
    var formData = req.body
    formData['lastEditTime'] = Date.now()

    Note.findByIdAndUpdate(formData.id,formData, function (err,ret) {
        if(err) {
            return next(err)
        } else {
            res.redirect('/my')
        }
    })
})

router.post('/delete', function(req, res, next){
    var noteId = req.body
    Note.deleteOne({_id:noteId.id},function(err, ret){
        if(err){
            return res.status(500).json({err_code:4})
        }
        return res.json({success:true})
    })
})

router.get('/note/type', function(req, res, next){
    var user = req.session.user
    Note.aggregate([
        {
            $group:{
                '_id':{'type':'$type'},
                'count':{'$sum':1}
            }
        }
    ]).exec(function(err, ret){
        if(err){
            return next(err)
        }
        res.render('type.html', {
            title:'类别',
            typeCount:ret,
            user:user
        })
    })
})

router.get('/getType', function(req, res, next){
    var type = req.query
    
    // 查询同类型的文档
    Note.find(type).populate('userId').exec(function(err, ret){
        if(err){
            return res.status(500).json({success:false})
        }
        // console.log(ret)
        return res.json({success:true, data:ret})
    })
})

router.get('/user/edit', function(req, res, next){
    // 获取用户
    var user = req.session.user
    if(!user){
        return next(new Error('未登录'))
    }

    res.render('user-edit.html',{
        title:'个人信息',
        user:user
    })
})

router.post('/user/edit', function(req, res, next){
    var formData = req.body
    User.updateOne(formData, function(err, ret){
        if(err){
            return next(err)
        }
    })
})

router.post('/user/update/avatar', function(req, res){
    console.log(req.body)
})

module.exports = router